# 作者: xzc
# 2024年12月30日15时25分24秒
# xxx@qq.com
class MusicPlayer(object):
    # 1. 类变量，用来保存唯一的实例
    instance = None

    # 2. 重写 __new__ 方法，用于创建实例对象
    def __new__(cls, *args, **kwargs):
        # 3. 检查是否已经存在实例，如果没有实例则创建一个新的实例
        if cls.instance is None:
            # 4. 调用父类的 __new__ 方法来分配内存并创建一个新的对象
            # 这里相当于 C 语言中的 malloc 操作，用于创建一个新的对象
            cls.instance = super().__new__(cls)

        # 5. 返回创建的唯一实例（如果已经创建过则返回同一个实例）
        return cls.instance

    # 6. __init__ 方法，初始化实例对象的属性
    def __init__(self, name):
        # 7. 设置实例的 name 属性
        self.name = name


if __name__ == '__main__':
    player1 = MusicPlayer('七里香')
    player2 = MusicPlayer('东风破')
    print(id(player1))
    print(id(player2))
    # 怎么让这两个id相等

    print(player1.name)
    print(player2.name)
